# Project 7 Bluetooth Remote Control
### **1.説明**

このキットにはDX-BT24 5.1 Bluetoothモジュールが含まれています。このBluetoothモジュールは256Kbのメモリを持ち、V5.1BLE Bluetooth仕様に準拠しており、ATコマンドをサポートしています。ユーザーは必要に応じてシリアルポートのボーレートやデバイス名などのパラメータを変更できます。
さらに、UARTインターフェースとBluetoothシリアルポートの透過伝送をサポートしており、低コスト、小型、低消費電力、高感度の送受信の利点も備えています。特に、強力な機能を実現するために必要な周辺部品はわずかです。
### **2.仕様**
- Bluetoothプロトコル: Bluetooth Specification V5.1 BLE
- 動作距離: 開放環境で40mの超長距離通信が可能
- 動作周波数: 2.4GHz ISMバンド
- 通信インターフェース: UART
- Bluetooth認証: FCC CE ROHS REACH認証基準に準拠
- シリアルポートパラメータ: 9600、8データビット、1ストップビット、パリティなし、フロー制御なし
- 電源: 5V DC
- 動作温度: –10℃ ~ +65℃
### **3.用途**
DX-BT24モジュールはBT5.1 BLEプロトコルもサポートしており、BLE Bluetooth機能を持つiOSデバイスに直接接続でき、バックグラウンドプログラムの常駐実行もサポートします。主に短距離データの無線伝送分野で使用され、煩雑なケーブル接続を回避し、シリアルケーブルの直接置き換えが可能です。
**BT24モジュールの成功した応用分野:**
※ Bluetooth無線データ伝送;
※ 携帯電話、コンピュータ周辺機器;
※ ハンドヘルドPOS機器;
※ 医療機器の無線データ伝送;
※ スマートホーム制御;
※ Bluetoothプリンター;
※ Bluetoothリモコン玩具;
※ 共有自転車;
### **4.ポート**

①STATE:ステータスピン
②RX:受信ピン
③TX:送信ピン
④GND:グランド
⑤VCC:電源
⑥EN:イネーブルピン
BTモジュールを開発ボードに接続します。
| Uno | BT24 |
| :--: | :--: |
| TX | RX |
| RX | TX |
| VCC | 5V |
| GND | GND |
### **5.コンポーネント**
| 開発ボード *1 | 8833 モータードライバー *1 | 赤色LEDモジュール*1 |
| :------------------------------: | :----------------------------------------------: | :------------------------------------------------------------: |
|  |  |  |
| 3P デュポンワイヤー*1 | USBケーブル*1 | DX-BT24 Bluetoothモジュール*1 |
|  |  |  |
### **6.配線図**

BTモジュールのRXD、TXD、GND、VCCはそれぞれTX、RX、G、5Vに接続します。
BTモジュールのSTATEとBRKは接続不要です。
注意:BTモジュールを8833ボードに挿入する際の向きに注意してください。コードをアップロードする前に挿入しないでください。
### **7.テストコード**
**注意:** テストコードをアップロードする前にBluetoothモジュールを取り外す必要があります。そうしないとコードのアップロードに失敗します。コードのアップロードが成功した後にBluetoothモジュールを接続してください。
```c
//***********************************************************************
/*
keyestudio 4wd BT Car
lesson 7.1
Bluetooth
http://www.keyestudio.com
*/
char ble_val; //character variable, used to store the value received by Bluetooth
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0) //シリアルバッファにデータがあるか確認
{
ble_val = Serial.read(); //シリアルバッファからデータを読み取る
Serial.println(ble_val); //表示
}
}
//***********************************************************************
```
### **8.テスト結果**
コードをV4.0ボードに正常にアップロードした後、配線図に従って配線を接続し、USBケーブルでコンピュータに接続してボードに電源を供給します。電源を入れた後、BTモジュールを挿入するとLEDが点滅し、その後BTアプリをダウンロードする必要があります。
### **9.Bluetoothアプリのダウンロード**
**Appleシステム**
(1). iPhoneのApp Storeを開きます。
(2). 「keyes BT car」を検索し、アプリを携帯にダウンロードします。

(3). インストール後、アプリのインターフェースに入ります。

(4). 左上の「**Connect**」ボタンをクリックしてBluetoothを自動検索します。**BT24**が見つかったら「**Connect**」をクリックしてBluetoothに接続し、次に  をクリックして4WDスマートカーの制御インターフェースに入ります。

**Androidシステム**
(1). Google Playストアに入り、「keyes 4wd」を検索します。

(2). インストール後のアプリアイコンは以下の通りです。

(3). アプリをクリックして以下のページに入ります。

(4). Bluetoothに接続した後、電源を入れるとBluetoothモジュールのLEDインジケーターが点滅します。「**Connect**」をタップしてBluetoothを検索します。

(5). **BT24**が見つかったら「Connect」をクリックしてBluetoothに接続します。「**Connect**」が「**is Connected**」に変わればBluetooth接続成功を示します。下の画像のようにBluetoothのLEDが点灯したままになります。

(6). Bluetoothモジュールに接続した後、シリアルモニターを開き、ボーレートを9600に設定します。Bluetoothアプリのボタンを押すと、対応する文字が表示されます。以下の通りです:

| キー | 機能 |
| ------------------------- | --------------------------------- |
|  | DX-BT24 5.1 Bluetoothモジュールとペアリング |
|  | Bluetoothの切断 |
| | 制御文字 | 制御文字 |
| ------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|  | 押す: F
離す: S | ボタンを押すと車が前進します;
離すと停止します |
|  | 押す: L
離す: S | ボタンを押すと車が左に曲がります;
離すと停止します |
|  | 押す: R
離す: S | ボタンを押すと車が右に曲がります;
離すと停止します |
|  | 押す: B
離す: S | ボタンを押すと車が後退します;
離すと停止します |
|  | 押す: “a”
離す: “S” | クリックで加速(最大値:255) |
|  | 押す: “d”
離す: “S” | クリックで減速(最小値:0) |
|  | クリックで携帯電話の重力感知機能を開始
もう一度クリックで重力感知制御を終了 | |
|  | クリックで“X”を送信、
もう一度クリックで“S”を送信 | ライントレース機能を開始;
もう一度クリックで終了 |
|  | クリックで“Y”を送信、
もう一度クリックで“S”を送信 | 超音波回避機能を開始;
もう一度クリックで終了 |
|  | クリックで“U”を送信、
もう一度クリックで“S”を送信 | 超音波追従機能を開始;
もう一度クリックで終了 |
|  | クリックで“G”を送信、
もう一度クリックで“S”を送信 | 制限機能を開始;
もう一度クリックで終了 |
### **10.コード説明**
**Serial.available()** : シリアルポートのバッファに現在残っている文字数を返します。一般的に、この関数はシリアルポートのバッファにデータがあるかどうかを判断するために使用されます。Serial.available() > 0 の場合、シリアルポートがデータを受信しており、読み取ることができることを意味します。
**Serial.read() :** シリアルポートのバッファから1バイトのデータを取り出して読み取ることを指します。例えば、デバイスがシリアルポートを通じてArduinoにデータを送信した場合、Serial.read()を使って送信されたデータを読み取ることができます。
### **11.拡張練習**
ここでは、携帯電話から送信されたコマンドを使ってLEDライトをオンまたはオフにする方法を見ていきます。配線図を見ると、LEDはD9ピンに接続されています。

```c
//****************************************************************************
/*
keyestudio smart turtle robot
lesson 7.2
Bluetooth LED
http://www.keyestudio.com
*/
int ledpin=9;
char ble_val;// Bluetoothで受信した値を格納するための文字変数
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
}
void loop()
{
if (Serial.available() > 0) // シリアルポートのキャッシュにデータがあるか確認
{
ble_val = Serial.read(); // シリアルポートのキャッシュからデータを読み取る
Serial.print("DATA RECEIVED:");
Serial.println(ble_val);
if (ble_val == 'F') {
digitalWrite(ledpin, HIGH);
Serial.println("led on");
}
if (ble_val == 'B') {
digitalWrite(ledpin, LOW);
Serial.println("led off");
}
}
}
//****************************************************************************
```
コードをV4.0ボードに正常にアップロードした後、配線図に従って配線を接続し、USBケーブルでコンピュータに接続してボードに電源を供給します。電源を入れたら、 と  をクリックしてLEDの点灯と消灯を制御します。